iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0
Python

初學者的 30 天 Python 復健課程系列 第 8

復健第八天:跟元祖雪餅沒有關係的元組 Tuples

  • 分享至 

  • xImage
  •  

猶如奢侈品的元祖雪餅

前陣子中秋剛過,不知道大家最喜歡哪家品牌的月餅?我個人很喜歡佳德鳳凰酥(純分享無業配!)然而在我小的時候,中秋送雪餅是一種很新潮的行為,跟一般的月餅不同,雪餅主打的是冰冰涼涼,有點像是冰淇淋餅乾,滿足吃月餅與吃冰淇淋的雙重口感享受。

那為什麼會講到元祖雪餅呢?因為知道元祖雪餅的,你不小心暴露真實年齡了!

(看這廣告的 240p 魔鬼畫質就知道多有年代感。)
Yes

今天的重點是元組 Tuples

今天的重點是不是雪餅的「元組 Tuples」,相較於有順序性、可變的串列,元組是另一種可以儲放多種資料型態的物件,然而不同的是,元組是有順序性,卻不可變的,也就是說,一旦元組被創造後,我們無法再去增加、修改、刪減這個元組裡面存放的資料,所以比起串列,元組身上可使用的方法也少了許多。

如何創建一個元組呢?

我們可以透過 () 小括號或是類別 tuple() 創建一個新的 tuple。

  • 使用 tuple() 創建一個新的元組

    tuple_one = tuple()  # 創造出一個空元組
    

然而要注意的是,如果要在 tuple() 內放入引數,引數必須是一個可迭代的物件(如字串、串列等)。

  • 使用小括號 () 創建元組

    tuple_two = ("item1", "item2", "item3")
    

如何取得元組內的元素?

既然元組和串列內的資料都有排序,自然也可以透過索引值取得裡面指定項目的元素。

fruits = ('banana', 'orange', 'mango', 'lemon')
#          0         1        2         3 

first_fruit = fruits[0]   # banana
second_fruit = fruits[1]  # orange

也可以透過反向的索引值來取得指定元素

fruits = ('banana', 'orange', 'mango', 'lemon')
#         -4        -3       -2        -1

first_fruit = fruits[-4]    # banana
second_fruit = fruits[-3]   # orange

如何在元組內使用切片 slicing ?

我們可以透過切片將一個元組的指定部分或是全部切割並複製出來,這樣會產生出一個新的元組。

fruits = ('banana', 'orange', 'mango', 'lemon')

all_fruits = fruits[0:4]    # all_fruits 會擁有 fruits 裡面完整的元素

orange_mango = fruits[1:3]  # 只會有 orange 跟 mango
orange_to_the_rest = fruits[1:] # 除了 banana,其他都包含

如果想要變動 tuple 裡面的元素,該怎麼辦?

雖然說 tuple 元組根據最一開始的說明是一個具有順序性且不可變更的資料型態,然而同一時間我們也知道 list 串列是具有順序性且可變更的資料型態,所以如果我們想對 tuple 進行如 list 的操作,最簡單暴力的方法就是使用 list() 類別,將 tuple 直接轉換為 list。

fruits = ('banana', 'orange', 'mango', 'lemon')
fruits = list(fruits) # 此時變數 fruits 被重新賦值,且該值會是一個串列 

print(fruits)     # ['banana', 'orange', 'mango', 'lemon']

fruits[0] = 'apple'
print(fruits)     # ['apple', 'orange', 'mango', 'lemon']

fruits = tuple(fruits) # 再次將 fruits 轉換為 tuple
print(fruits)     # ('apple', 'orange', 'mango', 'lemon')

如果檢查 tuple 裡面是否具有某個元素?

廢話不多說,我們一樣也可以使用運算子 in 來檢查,並透過回傳的布林值確認該元素是否存在。

fruits = ('banana', 'orange', 'mango', 'lemon')
print('orange' in fruits) # True
print('apple' in fruits) # False

fruits[0] = 'apple' # TypeError: 'tuple' object does not support item assignment,因為我們不能更改 tuple 裡面的既有元素。

如果我們想要刪除某個 tuple?

要特別注意的是,因為 tuple 不可變的特性,我們連 tuple 裡面本來存有的元素都不能刪除,因為刪除也是「變更行為」的一種,然而我們倒是可以刪除整個 tuple,讓指定的 tuple 整個也不剩。

fruits = ('banana', 'orange', 'mango', 'lemon')
del fruits

print(fruits) # NameError: name 'fruits' is not defined,因為 fruits 已經從記憶體中被刪除了。

為什麼元組叫元組?

其實我個人覺得翻譯成元組並不是一個最精準的說法,如果查詢維基百科,會發現元組更完整的名稱會稱作「多元組」、「順序組」,而這兩個名字能夠更好的表達出 tuple 的特性——可以存放多個資料,並且具有順序

元組這個名稱的完整名稱應該是「多個有限個元素所組成的序列」,tuple 被誰翻譯做「元組」的歷史事實已經不可考,但透過這個完整名稱,可以更清楚知道 tuple 名字所代表的意涵,而不是死記一個像是月餅品牌的專有名詞。

後記

在查詢元祖雪餅時,一直很好奇平常大家會買雪餅嗎?又有誰會買?為什麼這幾年台灣都看不到元祖雪餅的廣告了,無意間看到了這篇文章——專訪大陸糕餅界皇后:元祖食品董事長張秀琬,沒想到元祖雪餅不知不覺也將營業重心挪往中國大陸,而創辨人張秀琬對於雪餅這個特別的產品也有一番自己的定位邏輯,蠻有趣也蠻值得當作一篇冷知識文章來看看!


上一篇
復健第七天:老闆,我還想再多來一點串列 List
下一篇
復健第九天:集合 Set
系列文
初學者的 30 天 Python 復健課程13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言